package info.erge.sort;

import info.erge.search.ArrayGenerator;

public class InsertionSort {
    private InsertionSort() {
    }

    // public static <E extends Comparable<E>> void sort(E[] arr) {
    //     for (int i = 0; i < arr.length; i++) {
    //         for (int j = i; j >= 1; j--) {
    //             if (arr[j].compareTo(arr[j - 1]) < 0) {
    //                 SelectionSort.swap(arr, j, j - 1);
    //             } else {
    //                 break;
    //             }
    //         }
    //     }

    // public static <E extends Comparable<E>> void sort(E[] arr) {
    //     for (int i = 0; i < arr.length; i++) {
    //         E t = arr[i];
    //         int j;
    //         for (j = i; j >= 1; j--) {
    //             if (t.compareTo(arr[j - 1]) < 0) {
    //                 arr[j] = arr[j - 1];
    //             } else {
    //                 break;
    //             }
    //         }
    //         arr[j] = t;
    //     }
    // }

    public static <E extends Comparable<E>> void sort(E[] arr) {
        for (int i = arr.length - 1; i >= 0; i--) {
            E t = arr[i];
            int j;
            for (j = i; j + 1 < arr.length; j++) {
                if (t.compareTo(arr[j + 1]) > 0) {
                    arr[j] = arr[j + 1];
                } else {
                    break;
                }
            }
        }
    }

    public static void main(String[] args) {
        int[] dataSize = { 10000, 100000 };
        for (int n : dataSize) {
        Integer[] arr = ArrayGenerator.generateRandomdArray(n, n);
        SortingHelper.sortTest("InsertionSort", arr);
        }
    }
}
